home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / WinXP - Poczatek konca / PE Builder 3.1.10a / pebuilder3110a.exe / {app} / plugin / peinst / peinst.cmd < prev    next >
OS/2 REXX Batch file  |  2006-02-02  |  12KB  |  437 lines

  1. @echo off
  2. title BartPE Installer script v2.0.2
  3. echo.
  4. echo BartPE Installer script v2.0.2
  5. echo Copyright (c) 2003-2006 Bart Lagerweij. All rights reserved.
  6. echo This program is free software. Use and/or distribute it under
  7. echo the terms of the Nu2 License (see peinst.txt file).
  8. echo.
  9. setlocal
  10. rem %~d0
  11. rem cd "%~dp0"
  12. set _base=%~dp0
  13. set _tmp=%tmp%\peinst.tmp
  14. set _tmp1=%tmp%\peinst1.tmp
  15. for %%i in (_source _target _go) do set %%i=
  16. :_arg
  17. for %%i in (-h -?) do if /I "%%i" == "%1" goto _usage
  18. if /I "%1" == "-i" goto _i
  19. if "%_source%" == "" if not "%1" == "" goto _1
  20. if "%_target%" == "" if not "%1" == "" goto _2
  21. goto _start
  22. :_i
  23. set _go=_install
  24. goto _next
  25. :_1
  26. set _source=%1
  27. goto _next
  28. :_2
  29. set _target=%1
  30. goto _next
  31. :_next
  32. shift
  33. if "%1" == "" goto _start
  34. goto _arg
  35. :_usage
  36. echo.
  37. echo Usage: %~n0 [Options] [SourcePath] [TargetPath]
  38. echo.
  39. echo SourcePath: the path where BartPE can be found. By default the drive where 
  40. echo            %~n0 is located is used.
  41. echo TargetPath: is the path to where BartPE will be installed.By default drive 
  42. echo            C: is used.
  43. echo Options:
  44. echo -i          Install BartPE files (choice 5,1)
  45. echo -h          Help
  46. goto _end
  47. :_start
  48. echo PEINST: Checking for required file(s)...
  49. for %%i in (%_base%mkbt.exe %_base%nt2peldr.exe) do if not exist %%i (
  50.     echo PEINST: Required file %%i not found!
  51.     goto _abort)
  52. rem if exist "%~d0\i386\setupldr.bin" set _source=%~d0
  53. rem if exist c:\boot.ini set _target=c:
  54. if not "%_go%" == "" goto %_go%
  55. :_main
  56. echo.
  57. echo     -[MAIN]-
  58. echo     1) Change source path [%_source%]
  59. echo        - Path to BartPE source files -
  60. echo     2) Change target path [%_target%]
  61. echo        - Path where BartPE will be installed -
  62. echo     3) List or format volume(s).
  63. echo        - use for formatting USB Flash Devices -
  64. echo     4) Create, delete partition(s).
  65. echo        - use for partitioning a harddisk -
  66. if "%_source%" == "" goto _menu1
  67. if "%_target%" == "" goto _menu1
  68. echo     5) Install BartPE to %_target%
  69. echo        - Install BartPE files -
  70. :_menu1
  71. echo     Q) Quit.
  72. echo.
  73. :_mainch
  74. set _ok=
  75. set /p _ok=Enter your choice :
  76. if "%_ok%" == "1" goto _getsrc
  77. if "%_ok%" == "2" goto _gettrg
  78. if "%_ok%" == "3" goto _voledit
  79. if "%_ok%" == "4" goto _part
  80. if "%_ok%" == "5" goto _instpe
  81. if /I "%_ok%" == "q" goto _end
  82. goto :_mainch
  83.  
  84. :_getsrc
  85. set _ok=
  86. echo.
  87. echo PEINST: Please give the location to your BartPE files
  88. set /p _ok=Enter Source path :
  89. if exist "%_ok%\i386\setupldr.bin" (
  90.     set _source=%_ok%
  91. ) else (
  92.     echo.
  93.     echo PEINST: Error: The path "%_ok%" does not contain BartPE ^(or any other PE^) files!
  94.     pause
  95. )
  96. goto _main
  97.  
  98. :_gettrg
  99. set _ok=
  100. echo.
  101. echo PEINST: Please give the location where to install to
  102. set /p _ok=Enter Target path :
  103. if not exist %_ok%\nul (
  104.     echo PEINST: Path "%_ok%" does not exist!
  105.     pause
  106.     goto _main
  107. )
  108. set _target=%_ok%
  109. goto _main
  110.  
  111. :_instpe
  112. echo.
  113. echo     -[INSTALL]-
  114. echo     1) Install BartPE files to %_target%
  115. echo        - Install the files (takes a few minutes) -
  116. echo     2) Install PE-loader in %_target%\boot.ini
  117. echo        - use this if you want to select BartPE in your boot.ini menu -
  118. echo     Q) Quit
  119. echo.
  120. set _ok=
  121. set /p _ok=Enter your choice :
  122. if "%_ok%" == "1" goto _install
  123. if "%_ok%" == "2" goto _bootini
  124. if /I "%_ok%" == "q" goto _main
  125. goto :_voledit
  126.  
  127.  
  128. :_bootini
  129. echo PEINST: Checking if NT Loader is installed on drive %_target%
  130. if not exist %_target%\ntldr (
  131.     echo PEINST: Oops, file "%_target%\ntldr" not found.
  132.     goto _abort)
  133.  
  134. echo PEINST: Checking if boot.ini is on drive %_target%
  135. if not exist %_target%\boot.ini (
  136.     echo PEINST: Oops, file "%_target%\ntldr" not found.
  137.     goto _abort)
  138.  
  139. echo PEINST: Installing PE Bootsector (peboot.bin)
  140. %_base%mkbt.exe -x -c %_target% %_target%\peboot.bin
  141. if errorlevel 1 goto _abort
  142. echo PEINST: Updating peboot.bin
  143. %_base%nt2peldr.exe %_target%\peboot.bin
  144. if errorlevel 1 goto _abort
  145. echo PEINST: Updating boot.ini
  146. echo PEINST: Setting timeout to 30 seconds
  147. rem bootcfg.exe /Timeout 30
  148. rem if errorlevel 1 goto _abort
  149. echo PEINST: Adding BartPE entry to %_target%\boot.ini
  150. findstr /I /B /L /V "%_target%\peboot.bin" %_target%\boot.ini > %_target%\boot$.ini
  151. echo %_target%\peboot.bin="Boot BartPE (by PE Builder)" >> %_target%\boot$.ini
  152. attrib -r -h -s %_target%\boot.ini
  153. if errorlevel 1 goto _abort
  154. del /q /f %_target%\boot.ini
  155. if errorlevel 1 goto _abort
  156. ren %_target%\boot$.ini boot.ini
  157. if errorlevel 1 goto _abort
  158. attrib +r +h +s %_target%\boot.ini
  159. echo PEINST: Installing PE Loader (peldr)
  160. copy %_source%\i386\setupldr.bin %_target%\peldr
  161. if errorlevel 1 goto _abort
  162. echo PEINST: PE-Loader installed...
  163. pause
  164. goto _main
  165.  
  166. :_part
  167. echo.
  168. call :_dskcmd "" "list disk"
  169. if errorlevel 1 (
  170.     echo PEINST: Getting disk list failed. No disks?!?
  171.     pause
  172.     goto _main
  173. )
  174. :_partseldsk
  175. echo.
  176. set _disk=
  177. set /p _disk=Select disk. Enter disk number or 'q' to go back :
  178. if /I "%_disk%" == "q" goto _main
  179. call :_chkdsk %_disk%
  180. if errorlevel 1 goto _part
  181. goto _partedit
  182.  
  183. :_voledit
  184. echo.
  185. echo     -[VOLUME]-
  186. echo     1) List all volumes
  187. echo     2) Format a volume (FAT or NTFS)
  188. echo     Q) Quit
  189. echo.
  190. set _ok=
  191. set /p _ok=Enter your choice :
  192. if "%_ok%" == "1" call :_dskcmd "" "list volume"
  193. if "%_ok%" == "2" goto _volfmt
  194. if /I "%_ok%" == "q" goto _main
  195. goto :_voledit
  196.  
  197. :_volfmt
  198. set _letter=
  199. set /p _letter=Enter the drive letter to format (leave empty to quit) :
  200. if "%_letter%" == "" goto _voledit
  201. set _letter=%_letter:~0,1%
  202. :_askfs
  203. set _ok=
  204. set /p _ok=Filesystem to use, NTFS or FAT? (n/f/q to quit) :
  205. if /I "%_ok%" == "q" goto _voledit
  206. if /I "%_ok%" == "n" goto _askfs2
  207. if /I "%_ok%" == "f" goto _askfs2
  208. goto _askfs
  209. :_askfs2
  210. if /I "%_ok%" == "n" set _fs=ntfs
  211. if /I "%_ok%" == "f" set _fs=fat
  212. echo.
  213. echo PEINST: Are you sure you want to format drive "%_letter%:" ?
  214. echo PEINST: -- THIS WILL TOTALLY ERASE ALL DATA ON THAT VOLUME! --
  215. echo.
  216. set _ok=
  217. set /p _ok=To continue type "YES" (uppercase without quotes) :
  218. if "%_ok%" == "YES" goto _volfmtok
  219. echo PEINST: You typed "%_OK%", that is not equal to "YES", bailing out...
  220. goto _voledit
  221. :_volfmtok
  222. call :_format %_letter% %_fs%
  223. if errorlevel 1 (
  224.     echo PEINST: Error: Format returned an error...
  225.     pause
  226.     goto _voledit
  227. )
  228. echo.
  229. echo PEINST: Format was succesfull
  230. pause
  231. goto _voledit
  232.  
  233. :_format
  234. if "%1" == "" (
  235.     echo PEINST: Error: _format: %1 empty
  236.     goto _abort)
  237. if "%2" == "" (
  238.     echo PEINST: Error: _format: %2 empty
  239.     goto _abort)
  240. echo PEINST: Formating %1: 
  241. format %1: /fs:%2 /v:BartPE /backup /force
  242. goto :eof
  243.  
  244. :_partedit
  245. echo.
  246. echo Currently selected disk: %_disk%
  247. echo.
  248. echo     -[PARTITION]-
  249. echo     1) Show disk details
  250. echo     2) List partitions
  251. echo     3) Create primary partition and format it
  252. echo     4) Remove a partition
  253. echo     5) Remove all partitions (clean)
  254. echo     Q) Quit
  255. echo.
  256. set _ok=
  257. set /p _ok=Enter your choice :
  258. if "%_ok%" == "1" call :_dskcmd %_disk% "detail disk"
  259. if "%_ok%" == "2" call :_dskcmd %_disk% "list partition"
  260. if "%_ok%" == "3" goto _crpart
  261. if "%_ok%" == "4" goto _delpart
  262. if "%_ok%" == "5" goto _clean
  263. if /I "%_ok%" == "q" goto _main
  264. goto :_partedit
  265.  
  266. :_crpart
  267. echo.
  268. set _size=
  269. set /p _size=New partition size in MB (hit enter for all available space, q to quit) :
  270. if /I "%_size%" == "q" goto _partedit
  271. :_crpartl
  272. set _letter=
  273. set /p _letter=The drive letter you want to assign to the volume (q to quit) :
  274. if /I "%_letter%" == "q" goto _partedit
  275. set _letter=%_letter:~0,1%
  276. :_crparta
  277. set _active=
  278. echo PEINST: If you want to boot from this partition you must set it "active"
  279. set /p _active=Set the partition active? (y/n/q to quit) :
  280. if /I "%_active%" == "q" goto _partedit
  281. if /I "%_active%" == "y" goto _crpartgo
  282. if /I "%_active%" == "n" goto _crpartgo
  283. goto _crparta
  284. :_crpartgo
  285. set _sbuf="create partition primary
  286. if not "%_size%" == "" set _sbuf=%_sbuf% size=%_size%
  287. set _sbuf=%_sbuf%"
  288. if /I "%_active%" == "y" set _sbuf=%_sbuf% "active"
  289. set _sbuf=%_sbuf% "assign letter=%_letter%"
  290. call :_dskcmd %_disk% %_sbuf%
  291. if errorlevel 1 (
  292.     echo PEINST: Error: Partition creation returned an error...
  293.     pause
  294.     goto _partedit)
  295. call :_format %_letter% ntfs
  296. if errorlevel 1 (
  297.     echo PEINST: Error: Format returned an error...
  298.     pause
  299.     goto _partedit)
  300. echo.
  301. echo PEINST: Partition created and formatted OK
  302. echo PEINST: Drive letter to access the new volume is  "%_letter%:"
  303. goto _partedit
  304.  
  305. :_clean
  306. echo.
  307. echo PEINST: Do you want to remove all partitions from disk %_disk%?
  308. echo PEINST: -- THIS WILL TOTALLY ERASE ALL DATA ON YOUR DISK! --
  309. echo.
  310. set _ok=
  311. set /p _ok=To continue type "YES" (uppercase without quotes) :
  312. if "%_ok%" == "YES" goto _cleanok
  313. echo PEINST: You typed "%_OK%", that is not equal to "YES", bailing out...
  314. goto _partedit
  315. :_cleanok
  316. call :_dskcmd %_disk% "clean"
  317. if errorlevel 1 pause
  318. goto _partedit
  319.  
  320. :_dskcmd
  321. echo rem > %_tmp%
  322. if not "%~1" == "" (
  323.     echo Disk="%~1"
  324.     echo select disk %~1 >> %_tmp%)
  325. :_dskcmdl
  326. if "%~2" == "" goto _dskcmdgo
  327. echo Command="%~2"
  328. echo %~2 >> %_tmp%
  329. shift
  330. goto _dskcmdl
  331. :_dskcmdgo
  332. diskpart.exe /s "%_tmp%" > %_tmp1%
  333. call :_print "%_tmp1%"
  334. if errorlevel 1 goto _dskcmderr
  335. goto :eof
  336. :_dskcmderr
  337. color 00
  338. goto :eof
  339.  
  340. :_chkdsk
  341. if "%1" == "" goto _chkdski
  342. echo.
  343. echo PEINST: Checking disk %1, please wait...
  344. echo select disk %1 > %_tmp%
  345. echo detail disk >> %_tmp%
  346. diskpart.exe /s "%_tmp%" > %_tmp1%
  347. rem call :_print "%_tmp1%"
  348. if errorlevel 1 goto _chkdski
  349. echo PEINST: Disk number %1 is a valid disk number...
  350. goto :eof
  351. :_chkdski
  352. echo PEINST: Disk number %1 is invalid!
  353. :_chkdsk1n
  354. color 00
  355. goto :eof
  356.  
  357. :_install
  358. if not exist "%_source%\i386\setupldr.bin" (
  359.     echo.
  360.     echo PEINST: Error: The path "%_source%" does not contain BartPE ^(or any other PE^) files!
  361.     pause
  362.     goto _main
  363. )
  364. rem if /I "%_target%" == "%SystemDrive%" (
  365. rem     echo PEINST: Error: You cannot install BartPE onto your current SystemDrive
  366. rem     pause
  367. rem     goto _main
  368. rem )
  369. if not exist "%_target%" (
  370.     echo PEINST: Target path "%_target%" does not exist!
  371.     pause
  372.     goto _main
  373. )
  374. if not exist %_target%\ntdetect.com (
  375.     echo PEINST: Installing ntdetect to %_target%
  376.     copy %_source%\i386\ntdetect.com %_target%\
  377.     if errorlevel 1 goto _abort
  378. )
  379. if not exist %_target%\ntldr (
  380.     echo PEINST: Installing ntldr to %_target%
  381.     copy %_source%\i386\setupldr.bin %_target%\ntldr
  382.     if errorlevel 1 goto _abort
  383. )
  384.  
  385. echo PEINST: Installing BartPE files from %_source% to %_target%\
  386.  
  387. call :_copy i386 minint
  388. if errorlevel 1 goto _abort
  389. call :_copy programs programs
  390. if errorlevel 1 goto _abort
  391.  
  392. echo.
  393. echo PEINST: Installation completed...
  394. if not "%_go%" == "" goto _end
  395. pause
  396. goto _main
  397. :_copy
  398. if "%~1" == "" goto :eof
  399. if "%~2" == "" goto :eof
  400. if not exist "%_source%\%~1" goto :eof
  401. if exist "%_target%\%~2" (
  402.     echo PEINST: Checking for BartPE tag file ^(save removal^)...
  403.     if not exist "%_target%\%~2\bartpe.tag" goto _tagerr
  404.     echo PEINST: Removing %_target%\%~2
  405.     rmdir /s /q "%_target%\%~2\")
  406.     if errorlevel 1 goto :eof
  407.     mkdir "%_target%\%~2\"
  408.     if errorlevel 1 goto :eof
  409.     echo PEINST: Tag file for BartPE do not remove! > "%_target%\%~2\bartpe.tag"
  410.     if errorlevel 1 goto :eof
  411. echo PEINST: Copying files from "%_source%\%~1" to "%_target%\%~2"
  412. xcopy /e /s "%_source%\%~1\*.*" "%_target%\%~2\"
  413. goto :eof
  414. :_tagerr
  415. echo PEINST: Tag file "%_target%\%~2\bartpe.tag" not found!
  416. echo PEINST: Not safe to remove directory!
  417. echo.
  418. echo PEINST: Workaround:
  419. echo PEINST: You could delete the folder "%_target%\%~2" manually and restart the installation...
  420. rem set errorlevel to 1 by (mis)using color
  421. color 00 
  422. goto :eof
  423. :_print
  424. for /f "skip=4 tokens=*" %%i in (%~1) do echo %%i
  425. goto :eof
  426. :_abort
  427. echo.
  428. echo PEINST: Aborted...
  429. pause
  430. goto _main
  431. :_end
  432. for %%i in (_tmp _tmp1) do if exist "%%i" del /f /q "%%i"
  433. endlocal
  434. echo.
  435. echo PEINST: Done (PEINST.CMD will be closed)
  436. pause
  437.